// RAP [bm]: not applicable at the moment
///*******************************************************************************
// * Copyright (c) 2004, 2009 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.internal.handlers;
//
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//
//import org.eclipse.core.commands.ExecutionEvent;
//import org.eclipse.core.commands.ExecutionException;
//import org.eclipse.core.runtime.IConfigurationElement;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Point;
//import org.eclipse.swt.widgets.Combo;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.ui.internal.ExceptionHandler;
//
///**
// * This handler is an adaptation of the widget method handler allowing select
// * all to work even in some cases where the "selectAll" method does not exist.
// * This handler attempts to use "getTextLimit" and "setSelection" to do select
// * all. If this doesn't work, then it finally fails.
// *
// * @since 3.0
// */
//public class SelectAllHandler extends WidgetMethodHandler {
//
// /**
// * The parameters for a single point select all.
// */
// private static final Class[] METHOD_PARAMETERS = { Point.class };
//
// public final Object execute(final ExecutionEvent event)
// throws ExecutionException {
// final Method methodToExecute = getMethodToExecute();
// if (methodToExecute != null) {
// try {
// final Control focusControl = Display.getCurrent()
// .getFocusControl();
//
// final int numParams = methodToExecute.getParameterTypes().length;
//
// if ((focusControl instanceof Composite)
// && ((((Composite) focusControl).getStyle() & SWT.EMBEDDED) != 0)) {
//
// // we only support selectAll for swing components
// if (numParams != 0) {
// return null;
// }
//
// /*
// * Okay. Have a seat. Relax a while. This is going to be a
// * bumpy ride. If it is an embedded widget, then it *might*
// * be a Swing widget. At the point where this handler is
// * executing, the key event is already bound to be
// * swallowed. If I don't do something, then the key will be
// * gone for good. So, I will try to forward the event to the
// * Swing widget. Unfortunately, we can't even count on the
// * Swing libraries existing, so I need to use reflection
// * everywhere. And, to top it off, I need to dispatch the
// * event on the Swing event queue, which means that it will
// * be carried out asynchronously to the SWT event queue.
// */
// try {
// final Object focusComponent = getFocusComponent();
// if (focusComponent != null) {
// Runnable methodRunnable = new Runnable() {
// public void run() {
// try {
// methodToExecute.invoke(focusComponent,
// null);
// // and back to the UI thread :-)
// focusControl.getDisplay().asyncExec(
// new Runnable() {
// public void run() {
// if (!focusControl
// .isDisposed()) {
// focusControl
// .notifyListeners(
// SWT.Selection,
// null);
// }
// }
// });
// } catch (final IllegalAccessException e) {
// // The method is protected, so do
// // nothing.
// } catch (final InvocationTargetException e) {
// /*
// * I would like to log this exception --
// * and possibly show a dialog to the
// * user -- but I have to go back to the
// * SWT event loop to do this. So, back
// * we go....
// */
// focusControl.getDisplay().asyncExec(
// new Runnable() {
// public void run() {
// ExceptionHandler
// .getInstance()
// .handleException(
// new ExecutionException(
// "An exception occurred while executing " //$NON-NLS-1$
// + methodToExecute
// .getName(),
// e
// .getTargetException()));
// }
// });
// }
// }
// };
//
// swingInvokeLater(methodRunnable);
// }
// } catch (final ClassNotFoundException e) {
// // There is no Swing support, so do nothing.
//
// } catch (final NoSuchMethodException e) {
// // The API has changed, which seems amazingly unlikely.
// throw new Error("Something is seriously wrong here"); //$NON-NLS-1$
// }
// } else if (numParams == 0) {
// // This is a no-argument selectAll method.
// methodToExecute.invoke(focusControl, null);
// focusControl.notifyListeners(SWT.Selection, null);
//
// } else if (numParams == 1) {
// // This is a single-point selection method.
// final Method textLimitAccessor = focusControl.getClass()
// .getMethod("getTextLimit", NO_PARAMETERS); //$NON-NLS-1$
// final Integer textLimit = (Integer) textLimitAccessor
// .invoke(focusControl, null);
// final Object[] parameters = { new Point(0, textLimit
// .intValue()) };
// methodToExecute.invoke(focusControl, parameters);
// if (!(focusControl instanceof Combo)) {
// focusControl.notifyListeners(SWT.Selection, null);
// }
//
// } else {
// /*
// * This means that getMethodToExecute() has been changed,
// * while this method hasn't.
// */
// throw new ExecutionException(
// "Too many parameters on select all", new Exception()); //$NON-NLS-1$
//
// }
//
// } catch (IllegalAccessException e) {
// // The method is protected, so do nothing.
//
// } catch (InvocationTargetException e) {
// throw new ExecutionException(
// "An exception occurred while executing " //$NON-NLS-1$
// + getMethodToExecute(), e.getTargetException());
//
// } catch (NoSuchMethodException e) {
// // I can't get the text limit. Do nothing.
//
// }
// }
//
// return null;
// }
//
// /**
// * Looks up the select all method on the given focus control.
// *
// * @return The method on the focus control; <code>null</code> if none.
// */
// protected Method getMethodToExecute() {
// Method method = super.getMethodToExecute();
//
// // Let's see if we have a control that supports point-based selection.
// if (method == null) {
// final Control focusControl = Display.getCurrent().getFocusControl();
// if (focusControl != null) {
// try {
// method = focusControl.getClass().getMethod("setSelection", //$NON-NLS-1$
// METHOD_PARAMETERS);
// } catch (NoSuchMethodException e) {
// // Do nothing.
// }
// }
// }
//
// return method;
// }
//
// /**
// * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement,
// * java.lang.String, java.lang.Object)
// */
// public void setInitializationData(IConfigurationElement config,
// String propertyName, Object data) {
// // The name is always "selectAll".
// methodName = "selectAll"; //$NON-NLS-1$
// }
//}